查看原文
其他

手绘五星兴家国——用Stata绘制五星红旗

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:邱   沣,河南大学经济学院

本文编辑:温和铭

技术总编:李婷婷

Stata&Python云端课程来啦!

       为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&Python特惠课程双双上线腾讯课堂~爬虫俱乐部推出了Python编程培训课程Stata基础课程Stata进阶课程Stata文本分析正则表达式网络爬虫基本字符串课程。报名课程即可加入答疑群,对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦。我们在这篇推文的最后提供了每门课程的课程二维码,大家有需要的话可以直接扫描二维码查看课程详情并进行购买哦~



     引言       

继上一次我们绘制出“隔壁三哥”家的国旗后(详见《我几乎画出了“隔壁三哥”家的国旗》),今天正值毛爷爷诞辰128周年,让我们来一起用Stata绘制一面五星红旗,再看看这面被革命先烈们热血染红的旗帜!


我们知道,五星红旗由一个红色矩形作为背景,左上角四个小五角星围绕着一个大五角星,颜色都是黄色。这里我们需要先计算出五角星的中心坐标,然后勾勒出五角星的轮廓,最后涂上颜色即可。
一、坐标
确定国旗的大小和长宽比01
国旗的长宽比为3:2,所以我们设置国旗长为30个单位,宽为20个单位;程序如下:
clearset obs 100input x y z-15 10 1 15 10 1 15 -10 1-15 -10 1-15 10 1endtwoway area y x if z==1, color(red)

这样我们就定义了一个长为30,宽为20的红色矩形,共有4个顶点,但要使其成为一个封闭图形,则需要5个点。第5个点和第1个点的坐标要完全一致,因此我们定义了五个坐标。twoway area可用于绘制带有区域阴影的双向线图,简单来说就是可以在两条线段之间的区域涂上颜色。之前的推文中也有介绍过。
五角星中心坐标02
根据坐标图观察,大五角星的中心坐标为(-10,5),其余小星的中心坐标为(-5, 8),(-3, 6),(-3, 3),(-5, 1)。

在定义了五角星的中心坐标后,就可以计算五角星的五个顶点坐标了。比如大五角星(中心点( -10 , 5 ), 半径为 3 )。我们通过下边的程序来计算五角星顶点的坐标并画出一个黄色的五角星:
forvalues i = 1/6{ local theta = 2 * (`i' - 1) * 2 * _pi / 5 local k = `i' + 6 replace x = 3*sin(`theta') - 10 in `k' replace y = 3*cos(`theta') + 5 in `k'}replace z = 2 in 6/12tw area y x if z==2, color(yellow)

在上述程序中,我们先生成5个等分的角,然后用 cos(theta) 和 sin(theta) 来计算出 x , y ,因为半径为 3,所以又乘以3 ,再加上中心点坐标即可。

这里大家会发现在生成角度的时候我们乘上了2 ,这是因为绘制一个五角星时,如果我们把点挨个连接,将会得到一个五边形而不是五角星,而我们将五个点通过隔一个点连接而成时,就会得到一个五角星。下边的程序分别绘制出了五边形和五角星:
clearset obs 6gen theta = 1*(_n-1)*(2*_pi)/5gen x = sin(theta)gen y = cos(theta)tw area y x ,xsize(1) ysize(1) color(red) nodropbase
clearset obs 6gen theta = 2*(_n-1)*(2*_pi)/5 //注意这里与上边的程序不同gen x = sin(theta)gen y = cos(theta)tw area y x ,xsize(1) ysize(1) color(red) nodropbase

在上述的程序中,twoway area中的nodropbase选项指定封闭区域不是以(#)或以(0)为底的区域,而是由(y_1,x_1)和(y_N,x_N)组成的直线,其中(y_1,x_1)是第一个观测值中的y和x值,(y_N,x_N)是最后一个观测值中的y和x。

到此,我们就画出来了我们所要的大五角星,其他四个小五角星的画法也是类似的。
旋转小五角星03

因为四颗小五角星都要有一个角朝向大五角星的中心,我们必须将小五角星进行旋转。简单来说就是先计算大五角星中心坐标和小五角星中心坐标之间的角度,然后在生成小五角星各顶点坐标时减去这个角度即可。

以第四颗小五角星为例,其中心坐标为(-5, 1),大五角星中心坐标为(-10, 5),因此需要将小五角星旋转 arctan( [ -5 - ( -10 ) ] )/( 5 - 1 ) ) , 即arctan(5/4)。在生成theta时要减去这个角度。下边是对应的程序:

forvalues i = 1/6{ local theta = 2 * (`i' - 1) * 2 * _pi / 5 - atan(5/4) local k = `i' + 34 replace x = sin(`theta') - 5 in `k' replace y = cos(`theta') + 1 in `k'}replace z = 6 in 34/40tw (area y x if z==2, color(yellow)) /// (area y x if z==6, color(yellow)),legend(off)

二、绘制国旗

我们使用twoway area命令来对已经计算好的坐标图”上色“。

#delimit ; twoway (area y x if z==1, color(red)) (area y x if z==2, color(yellow)) (area y x if z==3, color(yellow)) (area y x if z==4, color(yellow)) (area y x if z==5, color(yellow)) (area y x if z==6, color(yellow)), xlabel(none) ylabel(none) // 不显示轴标签 xtitle("") ytitle("") // 不显示轴名称 legend(off) scheme(s1color) // 关闭图例 ;#delimit cr

在以上的程序中,我们只计算了一个小五角星的坐标,按照上边的程序进行操作的话,画出来的是一个大五角星和一个小五角星。大家只需将此篇推文转发至朋友圈,并截图发送至公众号后台,就可以获得画五星红旗的完整程序。快来一起用Stata画五星红旗吧~

在一片象征革命的红色中,中国共产党在红地中带来光明。四颗小五角星围绕着大五角星代表着广大人民紧密地团结在党的光辉下。最后我们以这面红旗遥祝毛爷爷“生日快乐”!



最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。



腾讯课堂课程二维码








            


 对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!











往期推文推荐
       Seminar丨董事会的性别多样化和企业创新:来自国际的证据

      Python与数据库交互——窗口函数

       Stata之post命令——数据邮递 

       爬虫俱乐部成员的Stata学习经验分享来啦!

       Seminar丨2002年萨班斯·奥克斯利法案的经济后果

        我几乎画出了“隔壁三哥”家的国旗

        Python基础——三大数字类型,你都了解吗?
        如何用Stata绘制带指向性箭头标注的图像       
        Seminar丨荐仆贷款——19世纪中国的信任辅助贷款【技能篇】多进程队列间通信

Seminar丨公司董事会的人才增长:来自中国的证据

正则表达式--懒惰模式

爬完独立董事的年薪,我的眼镜跌破了!识别旅游“照骗”——看风景名胜是否名副其实主成分分析的Python实现

正则表达式--贪婪模式

Seminar丨谁更重要:高管股权薪酬与财务报告欺诈DOS能量,超乎你想象!

爬虫实战丨走进哈利波特的魔法世界

数据集合并的新路子-frlink命令

Seminar丨附近的公司:利用卫星图像研究本地信息优势

线性同余法生成伪随机数 

[技能篇]多线程爬虫

“好哭”是衡量一部好电影的标准吗?

Stata&Python云端课程来啦!

带你了解Stata中的矩阵

Seminar|总统的朋友:政治关联与企业价值
爬虫实战 | 爬取中国天气网

爬虫实战 | 爬取东方财富网经济数据——以居民消费价格指数(CPI)为例

Seminar|媒体关联董事对融资和外部治理的影响神奇的组内交叉合并 PDF分章节转TXT并实现可视化——以胡景北知青日记1971至1978年为例

万物皆可开——shellout妙用

无处不在的系列配置项|从零开始的Pyecharts(三)

使用Python制作自动聊天机器人  

关于我们 


   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里
为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众
号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。





您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存